Q-Learning এবং Deep Q-Learning (DQN) হল Reinforcement Learning (RL) এর দুটি শক্তিশালী অ্যালগরিদম। এদের উদ্দেশ্য হল, একটি এজেন্টকে পরিবেশে সিদ্ধান্ত গ্রহণ শিখানো যাতে এটি সর্বোচ্চ রিওয়ার্ড অর্জন করতে পারে।
Q-Learning
Q-Learning হল একটি model-free reinforcement learning অ্যালগরিদম যা একটি Markov Decision Process (MDP)-এ কাজ করে। এটি একটি off-policy এলগরিদম, যেখানে Q-values বা action-value function আপডেট করা হয়, কিন্তু কোন পলিসি ব্যবহার করা হয় না (এটি পরবর্তীতে ব্যবহারকারীর দ্বারা নির্বাচিত হতে পারে)।
Q-Learning এর মূল ধারণা:
- Q-value: এটি একটি (state, action) জোড়ার জন্য একটি মান প্রদান করে, যা বলে দেয় যে একটি নির্দিষ্ট অবস্থায় (state) একটি নির্দিষ্ট কাজ (action) নেওয়ার ফলে কত রিওয়ার্ড অর্জিত হতে পারে।
- Bellman Equation: Q-Learning একটি গুরুত্বপূর্ণ সূত্র ব্যবহার করে Bellman equation যাতে বর্তমান Q-value আপডেট হয় পূর্ববর্তী রিওয়ার্ড এবং ভবিষ্যত সম্ভাব্য রিওয়ার্ডের উপর ভিত্তি করে।
Bellman Equation:
এখানে:
- : বর্তমান অবস্থা (state)
- : বর্তমান কর্ম (action)
- : রিওয়ার্ড
- : পরবর্তী অবস্থা
- : শিখন হার (learning rate)
- : ডিসকাউন্ট ফ্যাক্টর (discount factor), ভবিষ্যতের রিওয়ার্ডের গুরুত্ব।
Q-Learning এর Steps:
- Initialization:
- সমস্ত Q-values প্রাথমিকভাবে শূন্য বা একটি ছোট মানে ইনিশিয়ালাইজ করা হয়।
- Exploration vs Exploitation:
- Exploration: বিভিন্ন অ্যাকশন ট্রাই করা।
- Exploitation: আগে থেকে শিখে নেওয়া Q-values অনুযায়ী সেরা অ্যাকশন বেছে নেওয়া।
- সাধারণত ε-greedy policy ব্যবহার করা হয়, যেখানে একটি ছোট সম্ভাবনায় (ε) নতুন অ্যাকশন নেওয়া হয় এবং অন্যথায় সর্বোচ্চ Q-value অনুযায়ী কাজ করা হয়।
- Q-value আপডেট:
- পরিবেশের সাথে ইন্টারঅ্যাক্ট করার পরে, পুরানো Q-value আপডেট করা হয়।
- উদাহরণস্বরূপ, যদি আপনি একটি সঠিক অ্যাকশন নেন এবং পুরস্কৃত হন, তবে সেই অ্যাকশনটির জন্য Q-value বৃদ্ধি পায়।
Q-Learning এর একটি উদাহরণ:
import numpy as np
# Environment parameters
n_actions = 4 # Number of possible actions
n_states = 6 # Number of states
# Q-table initialization
Q = np.zeros((n_states, n_actions))
# Learning parameters
alpha = 0.1 # Learning rate
gamma = 0.9 # Discount factor
epsilon = 0.1 # Exploration probability
# Example interaction
for episode in range(1000):
state = np.random.randint(0, n_states) # Random starting state
for t in range(100): # Limit for each episode's time steps
# Exploration vs Exploitation
if np.random.uniform(0, 1) < epsilon:
action = np.random.randint(0, n_actions) # Exploration
else:
action = np.argmax(Q[state, :]) # Exploitation
# Get next state and reward (for simplicity in this example)
next_state = (state + action) % n_states # Example transition
reward = 1 if next_state == 5 else 0 # Reward for reaching state 5
# Q-value update using Bellman equation
Q[state, action] = Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state, :]) - Q[state, action])
# Move to next state
state = next_state
Deep Q-Learning (DQN)
Deep Q-Learning হল Q-Learning এর একটি উন্নত সংস্করণ, যা Deep Learning ব্যবহার করে Q-values এবং পলিসি ফাংশন শিখতে সাহায্য করে। যখন Q-table সীমিত সাইজের জন্য কার্যকর, তবে Deep Q-Learning অনেক বড় বা জটিল পরিবেশে কার্যকরী, যেখানে states এবং actions এর বিশাল স্পেস থাকে।
Deep Q-Learning এর মূল ধারণা:
- Neural Network ব্যবহার করে Q-function (state-action values) অ্যাপ্রক্সিমেট করা হয়।
- এই ক্ষেত্রে, Q-values Neural Network দ্বারা অনুমান করা হয়, যেখানে ইনপুট হল স্টেট এবং আউটপুট হল বিভিন্ন অ্যাকশনগুলির জন্য Q-value।
Deep Q-Learning এর Steps:
- Neural Network Initialization:
- একটি নিউরাল নেটওয়ার্ক তৈরি করা হয় যা states এর জন্য Q-values প্রেডিক্ট করে।
- Experience Replay:
- প্রশিক্ষণের জন্য বিভিন্ন অভিজ্ঞতা (state, action, reward, next_state) সংগ্রহ করা হয় এবং replay buffer তে সঞ্চিত থাকে। এরপর একযোগে কিছু অভিজ্ঞতা র্যান্ডমভাবে নির্বাচিত করা হয়।
- Target Network:
- ডিপ Q-লার্নিং মডেলে একটি target network ব্যবহার করা হয়, যা এক পর্যায়ে প্রশিক্ষিত Q-network এর কপি থাকে এবং Q-value আপডেটের জন্য ব্যবহৃত হয়।
Deep Q-Learning এর একটি উদাহরণ (PyTorch):
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import random
# Deep Q-Network (Neural Network to approximate Q-function)
class DQN(nn.Module):
def __init__(self, n_states, n_actions):
super(DQN, self).__init__()
self.fc1 = nn.Linear(n_states, 128)
self.fc2 = nn.Linear(128, 128)
self.fc3 = nn.Linear(128, n_actions)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
return self.fc3(x)
# Hyperparameters
n_states = 6
n_actions = 4
learning_rate = 0.001
gamma = 0.9
epsilon = 0.1
batch_size = 32
# Initialize DQN
model = DQN(n_states, n_actions)
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
loss_fn = nn.MSELoss()
# Experience Replay
memory = []
def store_experience(state, action, reward, next_state):
memory.append((state, action, reward, next_state))
if len(memory) > 10000:
memory.pop(0)
def sample_experience():
return random.sample(memory, batch_size)
# Q-learning loop
for episode in range(1000):
state = np.random.randint(0, n_states)
for t in range(100):
# Choose action (ε-greedy)
if random.random() < epsilon:
action = random.randint(0, n_actions - 1)
else:
state_tensor = torch.tensor([state], dtype=torch.float32)
q_values = model(state_tensor)
action = torch.argmax(q_values).item()
# Simulate next state and reward
next_state = (state + action) % n_states
reward = 1 if next_state == 5 else 0
# Store experience
store_experience(state, action, reward, next_state)
# Sample batch and train
if len(memory) >= batch_size:
batch = sample_experience()
for s, a, r, ns in batch:
target = r + gamma * torch.max(model(torch.tensor([ns], dtype=torch.float32)))
current_q = model(torch.tensor([s], dtype=torch.float32))[a]
loss = loss_fn(current_q, target)
optimizer.zero_grad()
loss.backward()
optimizer.step()
# Move to next state
state = next_state
Q-Learning এবং Deep Q-Learning এর মধ্যে পার্থক্য
| Feature | Q-Learning | Deep Q-Learning (DQN) |
|---|---|---|
| State Space | ছোট সাইজের states এর জন্য কার্যকর | বড় এবং জটিল state space এর জন্য কার্যকর |
| Q-value representation | টেবিল (table) | Neural network |
| Model Type | Model-free | Model-free (neural network) |
| Memory | No experience replay | Experience replay (Replay buffer) |
| Target Network | Not used | Target network used for stability |
**সার
াংশ**
- Q-Learning একটি শক্তিশালী এবং সহজ reinforcement learning অ্যালগরিদম, যা ছোট এবং সীমিত state-action space এর জন্য কার্যকর।
- Deep Q-Learning (DQN) একটি আধুনিক সংস্করণ, যা নিউরাল নেটওয়ার্ক ব্যবহার করে Q-values অ্যাপ্রক্সিমেট করে এবং এটি বৃহত্তর এবং জটিল state-action space এর জন্য উপযুক্ত। DQN অভিজ্ঞতা পুনঃপ্রাপ্তি (experience replay) এবং টার্গেট নেটওয়ার্কের মতো বৈশিষ্ট্য ব্যবহার করে প্রশিক্ষণ প্রক্রিয়া স্থিতিশীল রাখে।
Q-Learning সাধারণত ছোট এবং সিম্পল টাস্কের জন্য, আর Deep Q-Learning বৃহত্তর এবং জটিল পরিবেশে দক্ষভাবে কাজ করতে পারে।
Read more